import axios from 'axios'

// 创建axios实例
const http = axios.create({
  baseURL: 'http://localhost:8080',
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器
http.interceptors.request.use(
  config => {
    // 动态获取token
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.Authorization = token
    }
    console.log('发送发现页面请求:', config)
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

// 响应拦截器
http.interceptors.response.use(
  response => {
    console.log('发现页面响应数据:', response)
    // 处理后端返回的数据结构 {code, message, data}
    let responseData = response.data
    
    // 统一数据格式处理
    if (responseData && responseData.code === 0) {
      responseData = responseData.data
    }
    
    // 只对发现页面数据接口进行特殊处理，其他接口直接返回
    if (response.config.url.includes('/api/discover/info')) {
      // 确保必要的字段存在且类型正确
      if (responseData) {
        // 处理danMuList1 - 确保是数组
        if (!Array.isArray(responseData.danMuList1)) {
          responseData.danMuList1 = []
        }
        
        // 处理danMuList2 - 确保是数组
        if (!Array.isArray(responseData.danMuList2)) {
          responseData.danMuList2 = []
        }
        
        // 处理postZone - 适配数组格式的原始数据
        if (!responseData.postZone) {
          responseData.postZone = {
            mainPost: {
              followerNum: 4998,
              title: '""出闲置🔍""',
              userAvatar: '/src/assets/imgs/avatar_login.png',
              userName: '打嘎的',
              postContent: '数码一套房子，两室一厅，一个一口，两北卧室，落地窗，家电齐全，拎包入住，有意私我。'
            },
            contentBlockList: [
              { img: '/src/assets/imgs/room_text_bg.png' },
              { img: '/src/assets/imgs/discover.png' },
              { img: '/src/assets/imgs/service_bg.png' }
            ]
          }
        } else if (Array.isArray(responseData.postZone)) {
          // 如果postZone是数组，找到main_post类型的数据作为mainPost
          const mainPostItem = responseData.postZone.find(item => item.configType === 'main_post')
          
          // 转换mainPost格式，映射字段名
          let mainPost = null
          if (mainPostItem) {
            mainPost = {
              followerNum: mainPostItem.followerNum,
              title: mainPostItem.title,
              userAvatar: mainPostItem.avatar,  // 注意字段名映射
              userName: mainPostItem.userName,
              postContent: mainPostItem.postContent
            }
          }
          
          // 创建contentBlockList（可以从其他配置项或空数组开始）
          const contentBlockList = []
          
          // 更新postZone为期望的对象格式
          responseData.postZone = {
            mainPost,
            contentBlockList
          }
        } else if (typeof responseData.postZone === 'object') {
          // 原有的对象格式处理逻辑
          if (!Array.isArray(responseData.postZone.contentBlockList)) {
            responseData.postZone.contentBlockList = []
          }
          // 确保mainPost存在
          if (!responseData.postZone.mainPost) {
            responseData.postZone.mainPost = {
              followerNum: 4998,
              title: '""出闲置🔍""',
              userAvatar: '/src/assets/imgs/avatar_login.png',
              userName: '打嘎的',
              postContent: '数码一套房子，两室一厅，一个一口，两北卧室，落地窗，家电齐全，拎包入住，有意私我。'
            }
          }
        } else {
          // 其他无效类型，设置默认值
          responseData.postZone = {
            mainPost: {
              followerNum: 4998,
              title: '""出闲置🔍""',
              userAvatar: '/src/assets/imgs/avatar_login.png',
              userName: '打嘎的',
              postContent: '数码一套房子，两室一厅，一个一口，两北卧室，落地窗，家电齐全，拎包入住，有意私我。'
            },
            contentBlockList: [
              { img: '/src/assets/imgs/room_text_bg.png' },
              { img: '/src/assets/imgs/discover.png' },
              { img: '/src/assets/imgs/service_bg.png' }
            ]
          }
        }
        
        // 处理benefits - 确保是数组
        if (!Array.isArray(responseData.benefits)) {
          responseData.benefits = []
        }
      }
    }
    
    console.log('处理后的发现页面数据:', responseData)
    return responseData
  },
  error => {
    console.error('发现页面请求错误:', error)
    
    // 处理401未授权错误
    if (error.response?.status === 401) {
      localStorage.removeItem('token')
      localStorage.removeItem('user')
      // 可以在这里添加路由跳转到登录页
      console.warn('Token已过期，请重新登录')
    }
    
    // 返回基础结构的数据，防止页面崩溃
    return {
      danMuList1: [],
      danMuList2: [],
      postZone: {
        mainPost: null,
        contentBlockList: []
      },
      benefits: []
    }
  }
)

/**
 * 获取发现页面数据
 * @returns {Promise} 发现页面数据
 */
export const getDiscoverDataApi = () => {
  return http.get('api/discover/info').catch(error => {
    console.error('获取发现页面数据失败:', error)
    // 返回模拟数据
    // return {
    //   danMuList1: [
    //     { avatar: '/src/assets/imgs/avatar_unlogin.png', content: '千饭了' },
    //     { avatar: '/src/assets/imgs/avatar_login.png', content: '过生日' },
    //     { avatar: '/src/assets/imgs/my_people.png', content: '千饭了' },
    //     { avatar: '/src/assets/imgs/avatar_unlogin.png', content: '过生日' },
    //     { avatar: '/src/assets/imgs/avatar_login.png', content: '分享你也刻' }
    //   ],
    //   danMuList2: [
    //     { avatar: '/src/assets/imgs/my_people.png', content: '过生日' },
    //     { avatar: '/src/assets/imgs/avatar_unlogin.png', content: '过生日' },
    //     { avatar: '/src/assets/imgs/avatar_login.png', content: '分享你也刻' },
    //     { avatar: '/src/assets/imgs/my_people.png', content: '过生日' },
    //     { avatar: '/src/assets/imgs/avatar_unlogin.png', content: '千饭了' }
    //   ],
    //   postZone: {
    //     mainPost: {
    //       followerNum: 4998,
    //       title: '""出闲置🔍""',
    //       userAvatar: '/src/assets/imgs/avatar_login.png',
    //       userName: '打嘎的',
    //       postContent: '数码一套房子，两室一厅，一个一口，两北卧室，落地窗，家电齐全，拎包入住，有意私我。'
    //     },
    //     contentBlockList: [
    //       { img: '/src/assets/imgs/room_text_bg.png' },
    //       { img: '/src/assets/imgs/discover.png' },
    //       { img: '/src/assets/imgs/service_bg.png' }
    //     ]
    //   },
    //   benefits: [
    //     { img: '/src/assets/imgs/discover_photo.png' },
    //     { img: '/src/assets/imgs/vip_bg.png' },
    //     { img: '/src/assets/imgs/room_text_bg.png' }
    //   ]
    // }
  })
}

// ==================== 帖子管理接口 ====================

/**
 * 创建分享帖子
 * @param {Object} postData 帖子数据
 * @returns {Promise} 创建结果
 */
export const createPostApi = (postData) => {
  console.log('发送创建帖子请求:', {
    url: 'api/discover/posts',
    data: postData,
    imagesCount: postData.images ? postData.images.length : 0
  })
  
  return http.post('api/discover/posts', postData).catch(error => {
    console.error('创建帖子失败:', error)
    console.error('错误详情:', {
      status: error.response?.status,
      statusText: error.response?.statusText,
      data: error.response?.data,
      message: error.message
    })
    throw error
  })
}

/**
 * 获取帖子列表
 * @param {Object} params 查询参数
 * @param {Number} params.page 页码（可选，默认1）
 * @param {Number} params.limit 每页数量（可选，默认10）
 * @returns {Promise} 帖子列表
 */
export const getPostsApi = (params = {}) => {
  return http.get('api/discover/posts', { params }).catch(error => {
    console.error('获取帖子列表失败:', error)
    throw error
  })
}

/**
 * 获取用户帖子列表
 * @param {Number} userId 用户ID
 * @param {Object} params 查询参数
 * @param {Number} params.page 页码（可选，默认1）
 * @param {Number} params.limit 每页数量（可选，默认10）
 * @returns {Promise} 用户帖子列表
 */
export const getUserPostsApi = (userId, params = {}) => {
  return http.get(`api/discover/posts/user/${userId}`, { params }).catch(error => {
    console.error('获取用户帖子列表失败:', error)
    throw error
  })
}

/**
 * 获取帖子详情
 * @param {Number} postId 帖子ID
 * @returns {Promise} 帖子详情
 */
export const getPostDetailApi = (postId) => {
  return http.get(`api/discover/posts/${postId}`).catch(error => {
    console.error('获取帖子详情失败:', error)
    throw error
  })
}

/**
 * 更新帖子
 * @param {Number} postId 帖子ID
 * @param {Object} postData 帖子数据
 * @returns {Promise} 更新结果
 */
export const updatePostApi = (postId, postData) => {
  return http.put(`api/discover/posts/${postId}`, postData).catch(error => {
    console.error('更新帖子失败:', error)
    throw error
  })
}

/**
 * 删除帖子
 * @param {Number} postId 帖子ID
 * @returns {Promise} 删除结果
 */
export const deletePostApi = (postId) => {
  return http.delete(`api/discover/posts/${postId}`).catch(error => {
    console.error('删除帖子失败:', error)
    throw error
  })
}

// ==================== 帖子互动接口 ====================

/**
 * 点赞帖子
 * @param {Number} postId 帖子ID
 * @returns {Promise} 点赞结果
 */
export const likePostApi = (postId) => {
  return http.post(`api/discover/posts/${postId}/like`).catch(error => {
    console.error('点赞帖子失败:', error)
    throw error
  })
}

/**
 * 取消点赞帖子
 * @param {Number} postId 帖子ID
 * @returns {Promise} 取消点赞结果
 */
export const unlikePostApi = (postId) => {
  return http.delete(`api/discover/posts/${postId}/like`).catch(error => {
    console.error('取消点赞帖子失败:', error)
    throw error
  })
}

/**
 * 分享帖子
 * @param {Number} postId 帖子ID
 * @returns {Promise} 分享结果
 */
export const sharePostApi = (postId) => {
  return http.post(`api/discover/posts/${postId}/share`).catch(error => {
    console.error('分享帖子失败:', error)
    throw error
  })
}

// ==================== 评论管理接口 ====================

/**
 * 添加评论
 * @param {Number} postId 帖子ID
 * @param {Object} commentData 评论数据
 * @param {String} commentData.content 评论内容
 * @param {Number} commentData.parentId 父评论ID（可选，用于回复评论）
 * @returns {Promise} 评论结果
 */
export const addCommentApi = (postId, commentData) => {
  return http.post(`api/discover/posts/${postId}/comments`, commentData).catch(error => {
    console.error('添加评论失败:', error)
    throw error
  })
}

/**
 * 获取评论列表
 * @param {Number} postId 帖子ID
 * @param {Object} params 查询参数
 * @param {Number} params.page 页码（可选，默认1）
 * @param {Number} params.limit 每页数量（可选，默认10）
 * @returns {Promise} 评论列表
 */
export const getCommentsApi = (postId, params = {}) => {
  return http.get(`api/discover/posts/${postId}/comments`, { params }).catch(error => {
    console.error('获取评论列表失败:', error)
    throw error
  })
}

/**
 * 更新评论
 * @param {Number} commentId 评论ID
 * @param {Object} commentData 评论数据
 * @param {String} commentData.content 评论内容
 * @returns {Promise} 更新结果
 */
export const updateCommentApi = (commentId, commentData) => {
  return http.put(`api/discover/posts/comments/${commentId}`, commentData).catch(error => {
    console.error('更新评论失败:', error)
    throw error
  })
}

/**
 * 删除评论
 * @param {Number} commentId 评论ID
 * @returns {Promise} 删除结果
 */
export const deleteCommentApi = (commentId) => {
  return http.delete(`api/discover/posts/comments/${commentId}`).catch(error => {
    console.error('删除评论失败:', error)
    throw error
  })
}

// ==================== 兼容性接口（保持向后兼容） ====================

/**
 * 评论帖子（兼容性接口）
 * @param {Number} postId 帖子ID
 * @param {Object} commentData 评论数据
 * @returns {Promise} 评论结果
 * @deprecated 请使用 addCommentApi
 */
export const commentPostApi = (postId, commentData) => {
  return addCommentApi(postId, commentData)
}

export default http
